package com.wangzhenyu.learn.test.jetpack.lifecycle_

import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import com.wangzhenyu.common.util.log.LogUtil

@Suppress("UNUSED")
class NoteOfLifecycle {

    //Activity的生命周期
    //onCreate() onStart() onResume() onPause() onStop() onDestroy()
    //Fragment生命周期
    //onAttach() onCreate() onCreateView() onActivityCreated() onStart() onResume() onPause() onStop() onDestroyView() onDestroy() onDetach()

    //Event与State
    //Event与上面那六个方法一一对应
    //Lifecycle.State.CREATED → 回调onCreate()、onStop()后；
    //Lifecycle.State.STARTED → 回调onStart()、onPause()后；
    //Lifecycle.State.RESUMED → 回调onResume()后；
    //Lifecycle.State.DESTROYED → 回调onDestroy()后；

    //region源码解析
    //lifecycleEventObserver(Object object) 方法
    //传入的object为FullLifecycleObserver类型，使用FullLifecycleObserverAdapter转换，然后当成LifecycleEventObserver用
    //若传入的是LifecycleEventObserver，则直接返回
    //若两者都不是，则说明是旧注解，则使用反射来处理
    //总之，这个方法会返回一个LifecycleEventObserver的子类
    //
    //LifecycleRegistry类
    //  定义一个mObserverMap，类型为FastSafeIterableMap<LifecycleObserver, ObserverWithState>
    //    FastSafeIterableMap：简陋版的LinkedHashMap，支持遍历时的元素删除，比SafeIterableMap占用更多内存，非线程安全
    //    ObserverWithState:初始化时，使用上面提到的Lifecycling.lifecycleEventObserver(observer)来获得一个LifecycleEventObserver的子类.
    //                      之后把他赋值给mLifecycleObserver。dispatchEvent（事件方法），这个东西会获取当前状态，比较添加观察者和当前状态取更小的那个。
    //                      回调对应方法，更新mState
    //    addObserver：查看drawable/lifecycleaddObserver
    //
    //  private State mState 这个是当前的状态
    //  private int mAddingObserverCounter 正在添加的观察者数量
    //  private boolean mHandlingEvent 是否正在处理事件
    //  private boolean mNewEventOccurred 是否有新的事件传进来
    //  private ArrayList<State> mParentStates 解决addObserver()过程的增删，保证链表不等式的成立
    //  private final boolean mEnforceMainThread 是否强制在主线程执行
    //
    //
    //ReportFragment
    //
    //
    //
    //ViewTreeLifecycleOwner
    //LifecycleRegistry是Lifecycle的实现类，使用时需要把宿主（比如说Activity）传进去。
    //endregion

    //注意事项
    //Lifecycle组件在 onCreate() 方法中尚未初始化完成，因此在该方法中使用它们可能会导致崩溃或不可预测的行为。建议在 onStart() 方法中使用 Lifecycle 组件。

    //使用Lifecycle
    //继承DefaultLifecycleObserver(这个在MainActivity中使用)(还可以通过继承LifecycleEventObserver实现)
    class MyObserver : DefaultLifecycleObserver {

        override fun onCreate(owner: LifecycleOwner) {
            super.onCreate(owner)
          //LogUtil.default03("onCreate")
        }

        override fun onStart(owner: LifecycleOwner) {
            super.onStart(owner)
           // LogUtil.default03("onStart")
        }

        override fun onResume(owner: LifecycleOwner) {
            super.onResume(owner)
          //  LogUtil.default03("onResume")
        }

        override fun onPause(owner: LifecycleOwner) {
            super.onPause(owner)
          //  LogUtil.default03("onPause")
        }

        override fun onStop(owner: LifecycleOwner) {
            super.onStop(owner)
           // LogUtil.default03("onStop")
        }

        override fun onDestroy(owner: LifecycleOwner) {
            super.onDestroy(owner)
           // LogUtil.default03("onDestroy")
        }
    }






}